package br.com.automed.entity;

import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.List;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.OneToMany;
import javax.persistence.PrimaryKeyJoinColumn;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import javax.persistence.Transient;

@Entity
@Table(name="CM_PACIENTE")
@PrimaryKeyJoinColumn(name="ID_PACIENTE", referencedColumnName="ID_USUARIO")
@NamedQueries({
	@NamedQuery(name="listarPaciente", query="from Paciente p WHERE p.perfil.tipoPerfil = :perfilPaciente")
})
public class Paciente extends Usuario {

	public static final String NAMED_QUERY_LIST_PACIENTE = "listarPaciente";
	
	@Column(name = "ST_MATRICULA")
	private String matricula;

	@Column(name = "ST_SEXO")
	private String sexo;

	@Temporal(TemporalType.DATE)
	@Column(name = "DT_NASCIMENTO")
	private Date dataNascimento;
	
	@ManyToOne()
	@JoinColumn(name="FK_CONVENIO", referencedColumnName="ID_CONVENIO")
	private Convenio convenio;
	
	@OneToMany(mappedBy="paciente")
	private List<Consulta> consultas;

	@OneToMany(mappedBy="paciente")
	private List<Laudo> laudos;

	@OneToMany(mappedBy="paciente")
	private List<Prontuario> prontuarios;
	
	@OneToMany(mappedBy="paciente")
	private List<Receita> receitas;
	
	@Transient
	public Integer getIdade(){
		
		Calendar atual = new GregorianCalendar();
		Calendar dt = Calendar.getInstance();
		dt.setTime(dataNascimento);
		
		return atual.get(Calendar.YEAR) - dt.get(Calendar.YEAR);
	}
	
	public Paciente() {
		convenio = new Convenio();
		consultas = new ArrayList<Consulta>();
		laudos = new ArrayList<Laudo>();
		prontuarios = new ArrayList<Prontuario>();
		receitas = new ArrayList<Receita>();
	}

	public String getMatricula() {
		return matricula;
	}

	public void setMatricula(String matricula) {
		this.matricula = matricula;
	}

	public Convenio getConvenio() {
		return convenio;
	}

	public void setConvenio(Convenio convenio) {
		this.convenio = convenio;
	}

	public List<Consulta> getConsultas() {
		return consultas;
	}

	public void setConsultas(List<Consulta> consultas) {
		this.consultas = consultas;
	}

	public List<Laudo> getLaudos() {
		return laudos;
	}

	public void setLaudos(List<Laudo> laudos) {
		this.laudos = laudos;
	}

	public List<Prontuario> getProntuarios() {
		return prontuarios;
	}

	public void setProntuarios(List<Prontuario> prontuarios) {
		this.prontuarios = prontuarios;
	}

	public List<Receita> getReceitas() {
		return receitas;
	}

	public void setReceitas(List<Receita> receitas) {
		this.receitas = receitas;
	}

	public String getSexo() {
		return sexo;
	}

	public void setSexo(String sexo) {
		this.sexo = sexo;
	}

	public Date getDataNascimento() {
		return dataNascimento;
	}

	public void setDataNascimento(Date dataNascimento) {
		this.dataNascimento = dataNascimento;
	}
	
}
